/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package parserxml;

import java.util.*;
import java.util.ArrayList;

/**
 *
 * @author Jacob
 */
public class Tabla {
    private String nombre;
    private HashMap<String,Atributo> atributos;
    private HashSet<String> clavePK;
    private ArrayList<HashMap<String, String>> filas;
    
    
    public Tabla(String nombre) {
        this.nombre = nombre;
        this.atributos = new HashMap<String, Atributo>();
        this.filas = new ArrayList<HashMap<String, String>>();
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public boolean hasAtributo(String nombreAtributo) {
        return this.atributos.containsKey(nombreAtributo);
    }
    
    public void addAtributo(String nombreAtributo, Atributo atributo) {
        this.atributos.put(nombreAtributo, atributo);
    }
    
    public Atributo getAtributo(String nombreAtributo) {
        return this.atributos.get(nombreAtributo);
    }
    
    /**
     * Retorna un iterador de todos los atributos de la tabla
     *
     * @return the atributos
     */
    public Iterator<Atributo> getAllAtributos() {
        return atributos.values().iterator();
    }

    /**
     * @return the clave
     */
    public HashSet<String> getClavePK() {
        return clavePK;
    }
    
    public void setClavePK(HashSet<String> clavePK) {
        this.clavePK = clavePK;
    }
    
    public void addClavePK(String clave) {
        this.clavePK.add(clave);
    }

    /**
     * Retorna true si el valor ya esta incluido en la tabla
     *
     * @param valor El valor a chequear
     */
    public boolean hasFila(HashMap<String, String> fila) {
        return filas.contains(fila);
    }
    
    public HashMap<String,String> getFilaConClave(String columnaClave, String clave) {
        Iterator<HashMap<String,String>> iteFilas = filas.iterator();
        HashMap<String,String> fila;
        while(iteFilas.hasNext()) {
            fila = iteFilas.next();
            if(fila.get(columnaClave).equals(clave)) {
                return fila;
            }
        }
        return null;
    }
    
    /**
     * Agrega un nuevo valor en la tabla
     * 
     * @param valor El valor a agregar
     */
    public void addFila(HashMap<String,String> fila) {
        filas.add(fila);
    }
}
